/*******************************************************************************
** 文件名称：main.c
** 文件作用：主函数文件
** 编写作者：Tom Free 付瑞彪
** 编写时间：2021-05-25
** 文件备注：
** 更新记录：
**           2021-05-25 -> 创建文件
**                                                            <Tom Free 付瑞彪>
**
**              Copyright (c) 2018-2020 付瑞彪 All Rights Reserved
**
**       1 Tab == 4 Spaces     UTF-8     ANSI C Language(C99)
*******************************************************************************/

#include "app_inc.h"

/* 按键处理 */
static void button_hadle(void)
{
    btn_event_t btn_evt;
    uint8_t btn_ret = button_poll();
    if (!btn_ret)
    {
        return;
    }
    for (btn_id_t i = BTN_ID_MODE; i < BTN_ID_MAX; i++)
    {
        if (btn_ret & (1 << i))
        {
            btn_evt = button_get_event(i);
            if (btn_evt == BTN_EVENT_CLICK)
            {
                page_mgr_parse_event((page_event_t)(PAGE_EVENT_BTN_MODE_CLICK + i * 3));
            }
            else if (btn_evt == BTN_EVENT_LONG_PRESS)
            {
                page_mgr_parse_event((page_event_t)(PAGE_EVENT_BTN_MODE_LONG_PRESS + i * 3));
            }
            else if (btn_evt == BTN_EVENT_LONG_REPEAT)
            {
                page_mgr_parse_event((page_event_t)(PAGE_EVENT_BTN_MODE_LONG_REPEAT + i * 3));
            }
        }
    }
}

/* 主函数 */
int main(int argc, char *argv[])
{
    uint16_t ms = 0;
    gm_time_t time = { .hour = 11, .minute = 59, .second = 50 };

    /* 初始化全局变量 */
    global_variable_init();
    /* 初始化eeprom变量 */
    eeprom_variable_init();
    /* 定时器0，2ms中断 */
    timer0_init();
    /* led */
    led_init();
    /* 使能led输出 */
    led_enable();
    /* 使能背景输出 */
    led_bg_enable();
    /* 设置亮度 */
    led_set_bg_brightness(eeprom_variable.bg_brightness);
    /* bell */
    bell_init();
    /* DS3231 */
    ds3231_init();
    /* button */
    button_init();

    /* 查看时间是否复位 */
    if (ds3231_get_stop_flag())
    {
        ds3231_clear_stop_flag();
        ds3231_write_time(&time);
        /* 上电短滴3声 */
        bell_play(5, 3);
    }
    else
    {
        /* 长滴1声 */
        bell_play(50, 1);
    }

    /*初始化页面管理 */
    page_mgr_init();

    /* 使能全局中断 */
    __enable_interrupt();

    while (1)
    {
        if (global_variable.timer0_int_flag)
        {
            global_variable.timer0_int_flag = false;
            if (++ms >= 100)
            {
                ms = 0;
                page_mgr_parse_event(PAGE_EVENT_TIMER_100MS);
            }
            if (!(ms % 10))
            {
                bell_poll();
                button_hadle();
            }
        }

        /* 轮询页面 */
        page_mgr_poll();
    }
}
